package io.renren.common.config.rabbit;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.Exchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName MqConfig
 * @Description: @Bean注释会将 Binding、Queue、Exchange 直接创建为组件（前提是mq中不存在）
 * @Author HeJie  734412450@qq.com
 * @Date 2021/1/26  21:47
 * @Version V1.0
 **/
@Configuration
public class MqConfig {


//    @Bean
//    public Queue orderDelayQueue() {
//        /*
//         * 功能描述: 创建一个私信队列，设置私信队列指定参数。绑定的交换机，路由键，延迟队列消息延迟时间
//         *
//         *   x-dead-letter-exchange: order-event-exchange
//         *   x-dead-letter-routing-key: order.release.order
//         *   x-message-ttl: 60000
//         */
//        Map<String, Object> map = new HashMap<>();
//        map.put("x-dead-letter-exchange", "order-event-exchange");
//        map.put("x-dead-letter-routing-key", "order.release.order");
////        map.put("x-message-ttl", 60000);
//        return new Queue("order.delay.queue", true, false, false, map);
//    }

    /**
     * 功能描述: 创建一个普通队列
     */
    @Bean
    public Queue orderReleaseOrderQueue() {
        return new Queue("order.release.queue", true, false, false, null);
    }

    /**
     * 功能描述: 创建一个topic 交换机
     */
    @Bean
    public Exchange orderEventExchange() {
        return new TopicExchange("order-event-exchange", true, false);
    }

    /**
     * 功能描述: 创建一个私信队列与交换机绑定关系
     */
    @Bean
    public Binding orderCreateOrderBinding() {
        return new Binding("order.release.queue",
                Binding.DestinationType.QUEUE,
                "order-event-exchange",
                "order.create.order", null);
    }

    /**
     * 功能描述: 创建消费队列与交换机的绑定关系
     */
    @Bean
    public Binding orderReleaseBinding() {
        return new Binding("order.release.queue",
                Binding.DestinationType.QUEUE,
                "order-event-exchange",
                "order.release.order", null);
    }
}
